package com.tlgen.orm.components.autoFill;

import com.tlgen.orm.service.impl.DefaultEntityImpl;
import com.tlgen.orm.service.impl.EntityImpl;
import com.tlgen.orm.utils.ClassesUtils;

import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

/**
 * 实体实现加载器
 */
public class EntityImplHandlerLoader {

    // 处理器缓存（类 -> 处理器实例）
    private static final ConcurrentMap<Class<?>, EntityImpl<?>> HANDLER_CACHE = new ConcurrentHashMap<>();

    /**
     * 获取实体实现
     * @param entityClass 实体类
     * @return 实体实现实例
     */
    public static <T> EntityImpl<T> getHandler(Class<T> entityClass) {
        // 检查缓存
        EntityImpl<?> cached = HANDLER_CACHE.get(entityClass);
        if (cached != null) {
            return (EntityImpl<T>) cached;
        }
        try {
            Class<?> implClass = ClassesUtils.getEntityImplClassesTypeByModelClassName(entityClass.getName());
            if (Objects.nonNull(implClass)) {
                EntityImpl<T> handler = (EntityImpl<T>) implClass.getDeclaredConstructor().newInstance();
                // 缓存处理器（如果已存在则用现有的）
                HANDLER_CACHE.putIfAbsent(entityClass, handler);
                return (EntityImpl<T>) HANDLER_CACHE.get(entityClass);
            }
            return new DefaultEntityImpl();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

}
